package com.algorithm.cjm.july.chapter1.ch2;

import java.util.Arrays;

/**
 * 变位词
 * 兄弟字符串
 * 如果两个字符串中的字符一样，出现次数也一样，只是出现的顺序不一样，则认为这两个字符串是兄弟字符串。
 * 例如，“bad”和“adb”即为兄弟字符串。
 *
 * Created by jieming.chen on 2020/1/12
 */
public class ChangeWord {

    private static ChangeWord object = new ChangeWord();

    public static void main(String[] args) {
        String a = "baddd";
        String b = "abddd";

        String a1 = "abcdefg";
        String b1 = "abcdefghhhh";

        System.out.println(object.isChangeWord(a, b));
        System.out.println(object.isChangeWord(a1, b1));
        System.out.println(object.isChangeWord1(a, b));
        System.out.println(object.isChangeWord1(a1, b1));
    }

    /**
     * 是否兄弟字符串
     * 先排序，再内部判断每个char 是否相等
     *
     * @param a
     * @param b
     * @return
     */
    private boolean isChangeWord(String a, String b) {
        char[] chars = a.toCharArray();
        Arrays.sort(chars);
        char[] chars1 = b.toCharArray();
        Arrays.sort(chars1);

        String res = String.copyValueOf(chars);
        String res1 = String.copyValueOf(chars1);

        return res.equals(res1);
    }

    /**
     * a和b 放到数组中，数组的值就是出现的次数。
     * O(n)
     *
     * @param a
     * @param b
     * @return
     */
    private boolean isChangeWord1(String a, String b) {
        int[] arr = new int[26];
        for (int i = 0; i < a.length(); i++) {
            arr[a.charAt(i) - 'a']++;
        }
        for (int i = 0; i < b.length(); i++) {
            arr[b.charAt(i) - 'a']--;
        }
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != 0) {
                return false;
            }
        }
        return true;
    }
}
